package com.eltsistemas.controller.ferias;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import org.hibernate.Session;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.SessionAttributes;

import com.eltsistemas.dao.AutorizacaoDao;
import com.eltsistemas.dao.GenericDao;
import com.eltsistemas.hibernate.HibernateUtil;
import com.eltsistemas.modelo.Autorizacao;
import com.eltsistemas.modelo.Autorizacao_Ferias;
import com.eltsistemas.modelo.Ferias;
import com.eltsistemas.modelo.Usuario;

@Controller
@SessionAttributes(value="usuario_Logado")
@RequestMapping(value="/ferias")
public class FeriasAutorizacao {
	
	@RequestMapping(value="/autorizacao")
	@ResponseBody
	public List<Autorizacao_Ferias> exibe(Ferias ferias)
	{
		//Iniciando conexao a abrindo uma transacao
		Session session = new HibernateUtil().getSession();
		
		GenericDao<Ferias> daoFerias = new GenericDao<>(session, Ferias.class);
		Ferias f = daoFerias.findById(ferias.getId());
		
		AutorizacaoDao daoAutorizacao = new AutorizacaoDao(session);
		
		List<Autorizacao_Ferias> aut_Ferias_Aux = new ArrayList<>();
		
		List<Autorizacao_Ferias> aut_FeriasList = daoAutorizacao.autorizacao_FeriasList(f);
		for(Autorizacao_Ferias aut_Ferias : aut_FeriasList)
		{
			Autorizacao_Ferias autorizacao_Ferias = new Autorizacao_Ferias();
			autorizacao_Ferias.setData( aut_Ferias.getData() );
			autorizacao_Ferias.setDescricao( aut_Ferias.getDescricao() );
			autorizacao_Ferias.setAprovado( aut_Ferias.isAprovado() );
			
			Usuario usuario = new Usuario();
			usuario.setLogin(aut_Ferias.getUsuario().getLogin());
			
			autorizacao_Ferias.setUsuario( usuario );
			aut_Ferias_Aux.add(autorizacao_Ferias);
		}
		
		//Finalizando conexao
		session.close();

		return aut_Ferias_Aux;
	}
	
	@RequestMapping(value="aprovacao")
	public String aprovacao(Long id_Ferias, String nomeFuncionario,
							Autorizacao autorizacao, @ModelAttribute("usuario_Logado") Usuario user)
	{

		//Iniciando conexao a abrindo uma transacao
		Session session = new HibernateUtil().getSession();
		session.beginTransaction();
		
		//Carrega o objeto ferias a partir do nome
		GenericDao<Ferias> daoFerias = new GenericDao<>(session, Ferias.class);
		Ferias ferias = daoFerias.findById( id_Ferias );
		
		//Incluindo a autorizacao
		Autorizacao_Ferias aut_Ferias = new Autorizacao_Ferias();
		aut_Ferias.setData(Calendar.getInstance());
		aut_Ferias.setDescricao( autorizacao.getDescricao() );
		aut_Ferias.setFerias( ferias );
		aut_Ferias.setNivel( user.getNivel_Autorizacao() );
		aut_Ferias.setUsuario(user);
		
		GenericDao<Autorizacao_Ferias> daoAut_Ferias = new GenericDao<>(session, Autorizacao_Ferias.class);
		
		/*
		 * Se as ferias for reprovado, o atributo aprovado=false
		 */
		if(autorizacao.isAprovado() == true)
		{
			//Atualiza o atributo aprovado e nivel
			aut_Ferias.setAprovado(true);
			aut_Ferias.setNivel( user.getNivel_Autorizacao() );
		}
		
		else
		{
			//Atualiza o atributo status_Atual
			ferias.setStatus_Atual(false);
			aut_Ferias.setNivel( 0 );
				
			/*
			 * Salava o objeto na session
			*/
			session = daoFerias.altera(ferias);
		}
		
		/*Salvando objeto no session, comitando os dados no banco e
		 * finalizando a conexao
		*/
		session = daoAut_Ferias.adiciona(aut_Ferias);
		session.getTransaction().commit();
		session.close();
		
		return "redirect:lista?nomeFuncionario="+nomeFuncionario;
		
	}

}
